package ar.com.jendrix.login.web.bean;

import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;

import org.primefaces.context.RequestContext;

import ar.com.jendrix.common.exception.ApplicationException;
import ar.com.jendrix.common.exception.SystemException;
import ar.com.jendrix.common.persistence.entity.service.EntityService;
import ar.com.jendrix.common.web.EntityManagerBaseBean;
import ar.com.jendrix.login.dto.RolDTO;
import ar.com.jendrix.login.query.RolQuery;
import ar.com.jendrix.login.service.RolService;
import ar.com.jendrix.login.type.AplicacionType;
import ar.com.jendrix.web.util.SelectItemTypeUtil;

@ManagedBean
@SuppressWarnings("serial")
@SessionScoped
public final class RolBean extends EntityManagerBaseBean<RolDTO> {

	@EJB
	private RolService rolService;

	private RolQuery query;

	private List<SelectItem> aplicacionSIL;

	public final RolQuery getQuery() {
		return query;
	}

	public final List<SelectItem> getAplicacionSIL() {
		return aplicacionSIL;
	}

	@Override
	protected final RolDTO getNewEntityDTO() {
		return new RolDTO();
	}

	@Override
	protected final EntityService<RolDTO> getEntityService() throws SystemException {
		return rolService;
	}

	@Override
	protected final void clear() throws ApplicationException, SystemException {
		super.clear();
		this.query = new RolQuery();
		this.aplicacionSIL = SelectItemTypeUtil.getSelectItemList(AplicacionType.values());

		doSearch();
	}

	@Override
	protected void doSearch() throws ApplicationException, SystemException {
		setEntityList(new ListDataModel<RolDTO>(rolService.search(this.query)));
	}

	@Override
	protected void doAddSuccess() {
		String mensaje = String.format("Se agrego el rol %s", getEntity().getNombre());
		addInfoMessage(mensaje);
		RequestContext.getCurrentInstance().update("formMain:growl");
	}

	@Override
	protected void doEditSuccess() {
		String mensaje = String.format("Se actualizo el rol %s", getEntity().getNombre());
		addInfoMessage(mensaje);
		RequestContext.getCurrentInstance().update("formMain:growl");
	}

	@Override
	protected void doDeleteSuccess() {
		String mensaje = String.format("Se elimino el rol %s", getEntity().getNombre());
		addInfoMessage(mensaje);
		RequestContext.getCurrentInstance().update("formMain:growl");
	}

	@Override
	public final String getEntityDeleteMessage() {
		return getEntity().getNombre();
	}
}